﻿/* 
 * Since 2008 - 2012
 */

package com.hh.bss.auth.dao.impl;

import java.util.*;

import com.hh.bss.auth.dao.*;
import com.hh.bss.auth.entity.*;
import com.hh.bss.auth.service.*;
import com.hh.bss.auth.vo.query.*;
import com.hh.bss.base.*;
import com.hh.bss.common.MapObjectRowMapper;
import com.hh.bss.common.page.*;
import com.hh.bss.common.page.impl.*;
import com.hh.bss.util.*;





import static com.hh.bss.util.ObjectUtils.*;

import org.springframework.stereotype.Repository;

@Repository
public class SystemResourceDaoImpl extends BaseHibernateDao<SystemResource,java.lang.Integer>  implements SystemResourceDao<SystemResource,java.lang.Integer>{

	public Class getEntityClass() {
		return SystemResource.class;
	}
	
	public Page findPage(SystemResourceQuery query) {
        //XsqlBuilder syntax,please see http://code.google.com/p/rapid-xsqlbuilder
        // [column]为字符串拼接, {column}为使用占位符. [column]为使用字符串拼接,如username='[username]',偷懒时可以使用字符串拼接 
        // [column] 为PageRequest的属性
        
		
		    Class[] os={SystemResourceQuery.class};
    		Class property= org.springframework.beans.BeanUtils.findPropertyType(query.getField_type(), os);
        if (property!=null){
        	 if ("java.lang.String".equals(property.getName())){
	    			
	    			com.hh.bss.util.BeanUtils.setProperty(query, query.getField_type(),query.getQuery());
	    			
	    		}
	    		else if ("java.lang.Integer".equals(property.getName())){
	    			
	    			com.hh.bss.util.BeanUtils.setProperty(query, query.getField_type(), StringHelper.parseInteger(query.getQuery(), 0));
	    			
	    		}
	    		else if ("java.lang.Double".equals(property.getName())){
	    			com.hh.bss.util.BeanUtils.setProperty(query, query.getField_type(), StringHelper.parseDouble(query.getQuery(), 0));
	    		}
	    		else if ("java.util.Date".equals(property.getName())){
	    			com.hh.bss.util.BeanUtils.setProperty(query, query.getField_type(), DateHelper.toDate(query.getQuery(), DateHelper.DEFAULT_DATE_FORMAT));
	    		}
        }	 
        //生成sql2的原因是为了不喜欢使用xsqlbuilder的同学，请修改生成器模板，删除本段的生成
        StringBuilder sql2 = new StringBuilder("select t from SystemResource t where 1=1 ");
          if(isNotEmpty(query.getId())) {
            sql2.append(" and  t.id = :id ");
        }
          if(isNotEmpty(query.getModuleId())) {
            sql2.append(" and  t.moduleId = :moduleId ");
        }
          if(isNotEmpty(query.getParentId())) {
            sql2.append(" and  t.parentId = :parentId ");
        }
        if(isNotEmpty(query.getResourceNbr())) {
            sql2.append(" and  t.resourceNbr like :resourceNbr ");
            query.setResourceNbr("%"+query.getResourceNbr()+"%"); 

        }
        if(isNotEmpty(query.getName())) {
            sql2.append(" and  t.name like :name ");
            query.setName("%"+query.getName()+"%"); 

        }
        if(isNotEmpty(query.getEntryUrl())) {
            sql2.append(" and  t.entryUrl like :entryUrl ");
            query.setEntryUrl("%"+query.getEntryUrl()+"%"); 

        }
        if(isNotEmpty(query.getStatus())) {
            sql2.append(" and  t.status like :status ");
            query.setStatus("%"+query.getStatus()+"%"); 

        }
          if(isNotEmpty(query.getVisible())) {
            sql2.append(" and  t.visible = :visible ");
        }
          if(isNotEmpty(query.getDisplayLevel())) {
            sql2.append(" and  t.displayLevel = :displayLevel ");
        }
        if(isNotEmpty(query.getRemark())) {
            sql2.append(" and  t.remark like :remark ");
            query.setRemark("%"+query.getRemark()+"%"); 

        }
        if(isNotEmpty(query.getSortColumns())) {
            sql2.append(" order by :sortColumns ");
        }	
        
		return pageQuery(sql2.toString(),query);
	}
	public Page findResourcePage(SystemResourceQuery query) {
        //XsqlBuilder syntax,please see http://code.google.com/p/rapid-xsqlbuilder
        // [column]为字符串拼接, {column}为使用占位符. [column]为使用字符串拼接,如username='[username]',偷懒时可以使用字符串拼接 
        // [column] 为PageRequest的属性
		StringBuffer sql = new StringBuffer();
		List values = new ArrayList();
		sql.append(" select * from ( ");
		sql.append(" select a.id,a.name,a.module_id moduleId,b.roleIds,c.parent_ids from system_resource a ");
		sql.append(" left join (select a.resource_id,group_concat((convert(a.role_id,char)) separator ',') roleIds from  system_role_acl a group by a.resource_id) b on a.id=b.resource_id ");
		sql.append(" left join system_module c  on c.id=a.module_id ");
		sql.append(" ) t where 1=1 ");
		
		if(isNotEmpty(query.getName())) {
            sql.append(" and  t.name like ? ");
            values.add("%"+query.getName()+"%"); 
        }
		if(query.getRootModuleId()!=null) {
            sql.append(" and  t.parent_ids like ? ");
            values.add("%/"+query.getRootModuleId()+"/%"); 
        }
		if(isNotEmpty(query.getChildModuleIds())) {
			String[] s=query.getChildModuleIds().split(",");
			StringBuffer sb=new StringBuffer();
			sql.append(" and (");
			for(int i=0;i<s.length;i++){
				if(sb.length()>0) sb.append(" or ").append("  t.parent_ids like ? ");
				else sb.append("  t.parent_ids like ? ");
				//values.add(s[i]);
				values.add("%/"+s[i]+"/%");
			}
			sql.append(sb.toString());
			sql.append(" ) ");
             
        }
		System.out.println(sql.toString());
		
		return super.getJdbcDao().createPage(sql.toString(),values.toArray(), new MapObjectRowMapper(), query.getPageSize(), query.getPageNumber());
	}
	

}
